home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <exec/types.h>
- #include <exec/nodes.h>
- #include <exec/lists.h>
- #include <exec/ports.h>
- #include <graphics/layers.h>
- #include <graphics/gfxbase.h>
- #include <intuition/intuition.h>
- #include "amigamem.h"
- #include "intuition_utils.h"
- #ifndef __GNUC__
- #include <clib/exec_protos.h>
- #include <clib/alib_protos.h>
- #include <clib/intuition_protos.h>
- #include <clib/graphics_protos.h>
- #endif
- #ifdef __GNUC__
- #include <proto/exec.h>
- #include <proto/alib.h>
- #include <proto/intuition.h>
- #include <proto/graphics.h>
- #endif
- #ifdef __SASC
- #include <proto/exec.h>
- /* no <proto/alib.h> file with SAS/C */
- #include <proto/intuition.h>
- #include <proto/graphics.h>
- #endif
-
- #include "precognition.h"
- #include "BuilderWindow.h"
- #include "BuilderMethods/BuilderMethods.h"
- #include "GridSnapWindow.h"
- #include "Menus/pcg_Menus.h"
- #include "Menus/Menustuff.h"
- #include "ToolWindow.h"
- #include "ChainedWindows.h"
- #include "Prefs/pcgPrefs.h"
- #include "AutoCleanUp.h"
- #include "FileRequester/pcg_FileReq.h"
- #include "project.h"
- #include "funclists.h"
- #include "BuilderMethods/patchClasses.h"
-
- /* Missing prototype -- EDB */
- void Builder_EventLoop(void);
- void GracefulExit( short ExitStatus );
- void EditEnvironment( struct MsgPort *shared_port );
-
-
-
- /* declare lib structures */
- struct IntuitionBase *IntuitionBase = NULL;
- struct GfxBase *GfxBase = NULL;
- struct LayersBase *LayersBase = NULL;
- struct Library *IconBase = NULL;
-
- char silly;
- #define WAITCHAR scanf( "%c\n", &silly )
- #define DUMPWAIT(s) printf( s ); WAITCHAR
-
- struct FileReqInfo filereq_info;
-
- #ifdef __SASC
- int __stack = 10000; /* min stacksize */
- #endif
-
- /* Upped Version & Revision -- EDB */
- char *Precognition_version = "$VER: Precognition 2.1 (9.1.95)";
- /*
- ** This string needs to be in there somewhere for the
- ** AmigaDOS VERSION command to find it.
- */
-
- struct pcgPreferences pcg_prefs =
- {
- DONT_KNOW /* Interlace */
- };
-
- void RestorePrevDir( void );
-
- struct Screen *screen = NULL;
-
- struct NewScreen screen_request =
- {
- 0,0, /* Left edge, Top edge */
- 640, 400, /* Width, Height */
- 2, /* Depth */
- 0, 1, /* Detail Pen, Block Pen */
- HIRES, /* View Modes */
- CUSTOMSCREEN, /* Type of screen */
- &pcg_Topaz80, /* Screen Font. */
- "Precognition", /* Title */
- NULL, /* Screen Gadgets */
- NULL /* Custom Bitmap */
- };
-
-
- struct MsgPort *shared_port = NULL; /* initialized to NULL -- EDB */
-
- int main( int argc, char **argv )
- {
-
- /* open intuition library */
- IntuitionBase = (struct IntuitionBase *)
- OpenLibrary( "intuition.library", 0 );
- if( IntuitionBase == NULL )
- {
- printf( "couldn't open intuition.library\n" );
- GracefulExit( FALSE );
- }
-
- GfxBase = (struct GfxBase *)
- OpenLibrary( "graphics.library", 0 );
- if( GfxBase == NULL )
- {
- printf( "couldn't open graphics.library\n");
- GracefulExit( FALSE );
- }
-
- LayersBase = (struct LayersBase *)
- OpenLibrary( "layers.library", 0 );
- if( LayersBase == NULL )
- {
- printf( "couldn't open layers.library\n");
- GracefulExit( FALSE );
- }
-
- IconBase = OpenLibrary( "icon.library", 0 );
- if( IconBase == NULL )
- {
- printf( "couldn't open icon.library\n" );
- GracefulExit( FALSE );
- }
-
- /*
- // Install Builder methods into the Precognition classes
- */
- patchClasses();
-
- Project_Init();
-
- /* DUMPWAIT("getting prefs\n"); */
- pcgGetPrefs( argc, argv, &pcg_prefs );
-
- screen_request.Width = GfxBase->NormalDisplayColumns;
- screen_request.Height = GfxBase->NormalDisplayRows;
- if( pcg_prefs.Interlace )
- {
- screen_request.ViewModes |= LACE;
- screen_request.Height *= 2;
- }
-
- /* DUMPWAIT("opening screen\n"); */
- screen = SmartOpenScreen( &screen_request );
- if( screen == NULL )
- {
- printf("Couldn't open a screen.\n");
- GracefulExit( FALSE );
- }
-
- if( ( shared_port = (struct MsgPort *)CreatePort( NULL, 0 ) ) == NULL )
- {
- printf("couldn't create a Message port.\n");
- GracefulExit( FALSE );
- }
-
-
- filereq_info.screen = screen;
- filereq_info.SharedUserPort = shared_port;
- filereq_info.filter = NULL;
-
- /* printf("calling EditEnvironment\n"); */
- EditEnvironment( shared_port );
-
- GracefulExit( TRUE );
-
- return 0;
- }
-
- /* Via some linker-magic, this function is automatically called at
- exit. This allows graceful cleanup after stack-overflows.
- (Except that it doesn't work.)
-
- It is also explicitly called by GracefulExit.
- */
-
- void __STDCleanUp( void )
- {
- AutoCleanUp();
-
- RestorePrevDir();
-
- if( shared_port )
- {
- DeletePort( shared_port );
- shared_port = NULL;
- }
-
- /* Close all windows, screens, libraries. */
-
- if( screen )
- {
- CloseScreen( screen );
- screen = NULL;
- }
-
- if( IconBase )
- {
- CloseLibrary( (struct Library *)IconBase );
- IconBase = NULL;
- }
-
- if( LayersBase )
- {
- CloseLibrary( (struct Library *)LayersBase );
- LayersBase = NULL;
- }
-
- if( GfxBase )
- {
- CloseLibrary( (struct Library *)GfxBase );
- GfxBase = NULL;
- }
-
- if( IntuitionBase )
- {
- CloseLibrary( (struct Library *)IntuitionBase );
- IntuitionBase = NULL;
- }
- }
-
-
- void GracefulExit( short ExitStatus )
- {
- __STDCleanUp();
- exit( ExitStatus );
- }
-
-
- void main_ParseMenuEvent( BuilderWindow *bw,
- USHORT MenuNumber,
- Window *window );
-
- void main_PositionTools( Screen *screen,
- ToolWindow *tw1,
- ToolWindow *tw2 );
-
-
- char *cyclegadget_choices[] =
- {
- "this",
- "that",
- "the other",
- NULL /* _must_ be terminated by a NULL */
- };
-
-
- Menu *menustrip = NULL;
- GridSnapWindow gridsnapwindow;
- ToolWindow GraphicTool, IactorTool;
- BuilderWindow builderwindow;
-
- /* pcg_3DPens StandardPens( void ); */
-
- struct MinList DeferredResponses;
-
- void Builder_Init( void )
- {
- pcg_3DPens pens;
-
- /* pens = StandardPens(); */
- pens = StandardScreenPens( NULL );
-
- /* set up window to share its UserPort with other window. */
- /* DUMPWAIT("builderinit\n"); */
- BuilderWindow_Init( &builderwindow, 0,12, 640, 200, pens,
- "application", screen, &gridsnapwindow.gridinfo );
-
- builderwindow.pw.SharedUserPort = shared_port;
- AddMenuStrip( &builderwindow.pw, menustrip );
- AddWindowToChain( &builderwindow.pw );
-
- }
-
-
- void Builder_CleanUp( void )
- {
- pcgCloseWindow( &builderwindow.pw );
- RemoveWindowFromChain( &builderwindow.pw );
- CleanUp( (struct PObject *)&builderwindow.pw );
- }
-
- void Builder_Reset( BOOL reopen )
- {
- Builder_CleanUp();
- Builder_Init();
-
- if( reopen )
- {
- if( ! pcgOpenWindow( &builderwindow.pw ) )
- {
- printf( "couldn't open window\n" );
- GracefulExit( FALSE );
- }
- }
-
- }
-
- extern char* proj_filename;
-
- BOOL Builder_ParseArgs( void )
- {
- if( proj_filename )
- {
- Project_ReadIFF();
- }
- return TRUE;
- }
-
- void Builder_EventLoop()
- {
- IntuiMessage *message, local_msg;
- struct FuncNode *node;
-
- NewList( (struct List*) &DeferredResponses );
- Builder_Init();
-
- if( Builder_ParseArgs() )
- {
- if( ! pcgOpenWindow( &builderwindow.pw ) )
- {
- printf( "couldn't open window\n" );
- GracefulExit( FALSE );
- }
-
- while( ! Project_Done() )
- {
- message = WaitForMessage( shared_port );
- local_msg = *message;
-
- if( local_msg.Class == MENUVERIFY )
- {
- Respond( (struct Interactor *)&builderwindow.pw, message );
- Respond( (struct Interactor *)&gridsnapwindow.pw, message );
- }
- ReplyMsg( (struct Message *)message );
-
-
- switch( local_msg.Class )
- {
- case MENUPICK:
- main_ParseMenuEvent( &builderwindow, local_msg.Code,
- local_msg.IDCMPWindow );
- break;
- }
-
- Respond( (struct Interactor *)&GraphicTool.pw, &local_msg );
- Respond( (struct Interactor *)&IactorTool.pw, &local_msg );
- Respond( (struct Interactor *)&gridsnapwindow.pw, &local_msg );
- Respond( (struct Interactor *)&builderwindow.pw, &local_msg );
-
- while( ( node = (struct FuncNode *)
- RemHead( (struct List *)&DeferredResponses ) )
- != NULL )
- {
- (*node->func)( node->UserData );
- FreeFuncNode( node );
- }
-
- }
- }
-
- Builder_CleanUp();
- }
-
- void EditEnvironment( struct MsgPort *shared_port )
- {
- TitleBox titlebox;
- OutlineBox outlinebox;
- BoolGadget boolgadget;
- CheckBox checkbox;
- StringGadget stringgadget;
- IntegerGadget intgadget;
- HSlider hslider;
- HScroller hscroller;
- VSlider vslider;
- VScroller vscroller;
- ScrollingList scrollinglist;
- ListEditor listeditor;
- CycleGadget cyclegadget;
- pcg_3DPens pens;
-
- /* pens = StandardPens(); */
- pens = StandardScreenPens( NULL );
-
- menustrip = mnu_BuildMenus();
-
- /* DUMPWAIT("gridsnapinit\n"); */
- GridSnapWindow_Init( &gridsnapwindow, screen, shared_port, pens );
- AddWindowToChain( &gridsnapwindow.pw );
-
-
- /***************** Tool Window initialization. ****************/
- /* DUMPWAIT("toolwindowinit 1\n"); */
- ToolWindow_Init( &GraphicTool, 200, 212, screen, shared_port, pens, "Graphics" );
- AddWindowToChain( &GraphicTool.pw );
-
-
- TitleBox_Init( &titlebox, 0, 0, 160, 20, pens, "label");
- ToolWindow_AddArchetype( &GraphicTool, (struct GraphicObject *)&titlebox );
-
- OutlineBox_Init( &outlinebox, 0, 0, 90, 50, pens, " label ");
- ToolWindow_AddArchetype( &GraphicTool, (struct GraphicObject *)&outlinebox );
-
-
- /* DUMPWAIT("toolwindowinit 2\n"); */
- ToolWindow_Init( &IactorTool, 400, 212, screen, shared_port, pens, "Gadgets" );
- AddWindowToChain( &IactorTool.pw );
-
- /* DUMPWAIT("bool\n"); */
- BoolGadget_Init( &boolgadget, 0, 0, 96, 14, pens, "label" );
- ToolWindow_AddArchetype( &IactorTool, (struct GraphicObject *)&boolgadget );
-
- CheckBox_Init( &checkbox, 0, 0, pens, "label", TRUE );
- ToolWindow_AddArchetype( &IactorTool, (struct GraphicObject *)&checkbox );
-
-
- /* DUMPWAIT("cycle\n"); */
- CycleGadget_Init( &cyclegadget, 0, 0, 96, pens, "label:", cyclegadget_choices );
- ToolWindow_AddArchetype( &IactorTool, (struct GraphicObject *)&cyclegadget );
-
- /* DUMPWAIT("string\n"); */
- StringGadget_Init( &stringgadget, 0, 0, 112, 256, pens, "label:" );
- ToolWindow_AddArchetype( &IactorTool, (struct GraphicObject *)&stringgadget );
-
- /* DUMPWAIT("integer\n"); */
- IntegerGadget_Init( &intgadget, 0,0, 48, 10, pens, "label:" );
- ToolWindow_AddArchetype( &IactorTool, (struct GraphicObject *)&intgadget );
-
- /* DUMPWAIT("hslider\n"); */
- HSlider_Init( &hslider, 0, 0, 100, 16, pens, "label:" );
- ToolWindow_AddArchetype( &IactorTool, (struct GraphicObject *)&hslider );
-
- /* DUMPWAIT("hscroller\n"); */
- HScroller_Init( &hscroller, 0, 0, 100, pens, "label:" );
- ToolWindow_AddArchetype( &IactorTool, (struct GraphicObject *)&hscroller );
-
- /* DUMPWAIT("vslider\n"); */
- VSlider_Init( &vslider, 0, 0, 16, 100, pens, "label" );
- ToolWindow_AddArchetype( &IactorTool, (struct GraphicObject *)&vslider );
-
- /* DUMPWAIT("vscroller\n"); */
- VScroller_Init( &vscroller, 0, 0, 100, pens, "label" );
- ToolWindow_AddArchetype( &IactorTool, (struct GraphicObject *)&vscroller );
-
- /* DUMPWAIT("scrollinglist\n"); */
- ScrollingList_Init( &scrollinglist, 0, 0, 150, 100, pens, FALSE );
- ToolWindow_AddArchetype( &IactorTool, (struct GraphicObject *)&scrollinglist );
-
- /* DUMPWAIT("listeditor\n"); */
- ListEditor_Init( &listeditor, 0,0, 150, 100, pens, "label:" );
- ToolWindow_AddArchetype( &IactorTool, (struct GraphicObject *)&listeditor );
-
- /* DUMPWAIT("after openwindow\n"); */
-
- main_PositionTools( screen, &IactorTool, &GraphicTool );
- pcgOpenWindow( &IactorTool.pw );
- pcgOpenWindow( &GraphicTool.pw );
-
- AddMenuStrip( &GraphicTool.pw, menustrip );
- AddMenuStrip( &IactorTool.pw, menustrip );
- AddMenuStrip( &gridsnapwindow.pw, menustrip );
-
-
- Builder_EventLoop();
-
- pcgCloseWindow( &IactorTool.pw );
- pcgCloseWindow( &GraphicTool.pw );
- pcgCloseWindow( &gridsnapwindow.pw );
-
- CleanUp( (struct PObject *)&IactorTool.pw );
- CleanUp( (struct PObject *)&GraphicTool.pw );
- CleanUp( (struct PObject *)&gridsnapwindow );
-
- CleanUp( (struct PObject *)&titlebox );
- CleanUp( (struct PObject *)&outlinebox );
- CleanUp( (struct PObject *)&boolgadget );
- CleanUp( (struct PObject *)&checkbox );
- CleanUp( (struct PObject *)&cyclegadget );
- CleanUp( (struct PObject *)&stringgadget );
- CleanUp( (struct PObject *)&intgadget );
- CleanUp( (struct PObject *)&hslider );
- CleanUp( (struct PObject *)&hscroller );
- CleanUp( (struct PObject *)&vslider );
- CleanUp( (struct PObject *)&vscroller );
- CleanUp( (struct PObject *)&scrollinglist );
- CleanUp( (struct PObject *)&listeditor );
- }
-
- #define DEFER(f) QueueFunc( &DeferredResponses, (ptr2func) f, NULL )
-
- void main_ParseMenuEvent( BuilderWindow *bw,
- USHORT MenuNumber,
- Window *window )
- {
- pcg_MenuItem *item;
-
- if( MenuNumber == MENUNULL ) return;
-
- item = (pcg_MenuItem *)
- ItemAddress( window->MenuStrip, MenuNumber );
-
- switch( item->ItemID )
- {
- case PROJECT_NEW_ID:
- DEFER ( Project_New );
- break;
-
- case PROJECT_OPEN_ID:
- DEFER ( Project_Open );
- break;
-
- case PROJECT_SAVE_ID:
- DEFER ( Project_Save );
- break;
-
- case PROJECT_SAVE_AS_ID:
- DEFER ( Project_Save_As );
- break;
-
- case PROJECT_QUIT_ID:
- DEFER ( Project_Quit );
- break;
-
- case PROJECT_CODE_ID:
- DEFER ( Project_WriteCode );
- break;
-
- case PROJECT_ABOUT_ID:
- DEFER ( Project_About );
- break;
- }
-
- main_ParseMenuEvent( bw, item->NextSelect, window );
- }
-
-
- void main_PositionTools( Screen *screen,
- ToolWindow *tw1,
- ToolWindow *tw2 )
- {
- Point size_tw1, loc_tw1, size_tw2;
-
- size_tw1 = Size( (struct GraphicObject *)&tw1->pw );
- size_tw2 = Size( (struct GraphicObject *)&tw2->pw );
-
- SetLocation( (struct GraphicObject *)&tw1->pw, screen->Width - size_tw1.x -1, screen->Height - size_tw1.y -1 );
- loc_tw1 = Location( (struct GraphicObject *)&tw1->pw );
-
- SetLocation( (struct GraphicObject *)&tw2->pw, loc_tw1.x - size_tw2.x, screen->Height - size_tw2.y -1 );
- }
-
-